package main

import "fmt"

func main() {
	/*
		数据类型转换：Type Convert
		go语言是静态语言，定义、赋值、运算必须类型一致

		语法格式：Type(Value)

		注意点：兼容类型可以转换

		常数：在有需要的时候，自动转型
		变量：需要手动转型
	*/
	var a int8
	a = 10

	var b int16
	//b = a // cannot use a (variable of type int8) as type int16 in assignment
	b = int16(a)
	fmt.Println(a, b) // 10, 10

	f1, f2 := 3.14, 4.83
	var c, d int
	c = int(f1)
	d = int(f2)               // 浮点类型在转成整型的时候只是取了它的整数部分
	fmt.Println(f1, c, f2, d) // 3.14, 3, 4.83, 3

	f1 = float64(a)
	fmt.Println(f1, a) // 10, 10

	//不是所有的数据类型之间都可以转换
	//bool类型是表示对和错，它是一种逻辑值，不能与数值进行转换
	//只有兼容类型之间才可以转换
	//b1 := true
	//a = int8(b1) // cannot convert b1 (variable of type bool) to type int8

	//常数在我们有需要的时候会自动转型
	//而变量需要我们手动转型
	sum := f1 + 100                 //常数”100“，会在我们有需要的时候自动转换
	fmt.Printf("%T,%f\n", sum, sum) //float64,110.000000
}
